package com.guodi.model.service.impl;

import com.guodi.model.entity.IdtMonitorFill;
import com.guodi.model.service.IIdtValueUpdateService;
import com.guodi.model.utils.TimeUtils;
import org.springframework.stereotype.Service;

import java.util.Calendar;
import java.util.List;

/**
* @描述: 指标数值更新统一入库服务层
* @作者: 代鹏刚
* @日期: 2021/12/18 14:36
**/

@Service
public class IdtValueUpdateServiceImpl implements IIdtValueUpdateService {

    /**
    * @描述: (监测)指标填报时，获取复合指标的基础指标所选年份下最新的时间
     * 规则：对于历史年份（比如2020年），12月、4季度和12月31日是最新值；对于当前年份（比如2021年），
     * 11月、3季度和12月和16日分别是不同频率的最新值
    * @入参:
    * @出参:
    * @作者: 代鹏刚
    * @日期: 2021/12/18 14:47
    **/
    @Override
    public Object getNewestData(List<IdtMonitorFill> sourceList){
        for (IdtMonitorFill idtMonitorFill: sourceList) {
            if(idtMonitorFill.getIsBase()){
                // 如果是基础指标，则获取当前监测时间
                String monitorYear = idtMonitorFill.getMonitorTime().substring(0, 4);
                Calendar cal = Calendar.getInstance();
                Integer year = cal.get(Calendar.YEAR);
                if(year.toString().equals(monitorYear)){
                    // 如果跟当前年一致，则按照规则返回最新频率
                    if(idtMonitorFill.getUpdateCycle().equals("year")){
                        // 按年更新
                        idtMonitorFill.setMonitorTime(monitorYear);
                    }else if(idtMonitorFill.getUpdateCycle().equals("quarter")){
                        // 按季度更新
                        idtMonitorFill.setMonitorTime(TimeUtils.getPreQuarter());
                    }else if(idtMonitorFill.getUpdateCycle().equals("month")){
                        // 按月更新
                        idtMonitorFill.setMonitorTime(TimeUtils.getPreMonth());
                    }
                }else {
                    // 如果跟当前年不一致
                    if(idtMonitorFill.getUpdateCycle().equals("year")){
                        // 按年更新
                        idtMonitorFill.setMonitorTime(monitorYear);
                    }else if(idtMonitorFill.getUpdateCycle().equals("quarter")){
                        // 按季度更新
                        idtMonitorFill.setMonitorTime(monitorYear+"-4");
                    }else if(idtMonitorFill.getUpdateCycle().equals("month")){
                        // 按月更新
                        idtMonitorFill.setMonitorTime(monitorYear+"-12");
                    }
                }
            }
        }
        return sourceList;
    }
}
